{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 单车共享-回归分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from __future__ import print_function\n",
    "from __future__ import division\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "#模型\n",
    "from sklearn.linear_model import LinearRegression, RidgeCV, LassoCV, ElasticNetCV\n",
    "\n",
    "#模型评估\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.metrics import r2_score  #评价回归预测模型的性能\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取特征工程处理过得数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>yr</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant  season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  \\\n",
       "0        1         1         0         0         0       1       0       0   \n",
       "1        2         1         0         0         0       1       0       0   \n",
       "2        3         1         0         0         0       1       0       0   \n",
       "3        4         1         0         0         0       1       0       0   \n",
       "4        5         1         0         0         0       1       0       0   \n",
       "\n",
       "   mnth_4  mnth_5  ...   weekday_5  weekday_6  holiday  workingday      temp  \\\n",
       "0       0       0  ...           0          1        0           0  0.355170   \n",
       "1       0       0  ...           0          0        0           0  0.379232   \n",
       "2       0       0  ...           0          0        0           1  0.171000   \n",
       "3       0       0  ...           0          0        0           1  0.175530   \n",
       "4       0       0  ...           0          0        0           1  0.209120   \n",
       "\n",
       "      atemp       hum  windspeed  yr   cnt  \n",
       "0  0.373517  0.828620   0.284606   0   985  \n",
       "1  0.360541  0.715771   0.466215   0   801  \n",
       "2  0.144830  0.449638   0.465740   0  1349  \n",
       "3  0.174649  0.607131   0.284297   0  1562  \n",
       "4  0.197158  0.449313   0.339143   0  1600  \n",
       "\n",
       "[5 rows x 35 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = \"./\"\n",
    "data = pd.read_csv(dpath + \"fe_day.csv\")\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练数据和测试数据分割（将 2012 年的数据作为测试数据）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Soft\\AI\\Anaconda2\\envs\\python36\\lib\\site-packages\\ipykernel_launcher.py:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  \n",
      "F:\\Soft\\AI\\Anaconda2\\envs\\python36\\lib\\site-packages\\ipykernel_launcher.py:6: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "train = data[data.yr == 0]\n",
    "train.drop(['instant','yr'],axis = 1,inplace = True)\n",
    "\n",
    "test = data[data.yr == 1]\n",
    "test_id = test['instant']\n",
    "test.drop(['instant','yr'],axis = 1, inplace = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 365 entries, 0 to 364\n",
      "Data columns (total 33 columns):\n",
      "season_1        365 non-null int64\n",
      "season_2        365 non-null int64\n",
      "season_3        365 non-null int64\n",
      "season_4        365 non-null int64\n",
      "mnth_1          365 non-null int64\n",
      "mnth_2          365 non-null int64\n",
      "mnth_3          365 non-null int64\n",
      "mnth_4          365 non-null int64\n",
      "mnth_5          365 non-null int64\n",
      "mnth_6          365 non-null int64\n",
      "mnth_7          365 non-null int64\n",
      "mnth_8          365 non-null int64\n",
      "mnth_9          365 non-null int64\n",
      "mnth_10         365 non-null int64\n",
      "mnth_11         365 non-null int64\n",
      "mnth_12         365 non-null int64\n",
      "weathersit_1    365 non-null int64\n",
      "weathersit_2    365 non-null int64\n",
      "weathersit_3    365 non-null int64\n",
      "weekday_0       365 non-null int64\n",
      "weekday_1       365 non-null int64\n",
      "weekday_2       365 non-null int64\n",
      "weekday_3       365 non-null int64\n",
      "weekday_4       365 non-null int64\n",
      "weekday_5       365 non-null int64\n",
      "weekday_6       365 non-null int64\n",
      "holiday         365 non-null int64\n",
      "workingday      365 non-null int64\n",
      "temp            365 non-null float64\n",
      "atemp           365 non-null float64\n",
      "hum             365 non-null float64\n",
      "windspeed       365 non-null float64\n",
      "cnt             365 non-null int64\n",
      "dtypes: float64(4), int64(29)\n",
      "memory usage: 97.0 KB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 366 entries, 365 to 730\n",
      "Data columns (total 33 columns):\n",
      "season_1        366 non-null int64\n",
      "season_2        366 non-null int64\n",
      "season_3        366 non-null int64\n",
      "season_4        366 non-null int64\n",
      "mnth_1          366 non-null int64\n",
      "mnth_2          366 non-null int64\n",
      "mnth_3          366 non-null int64\n",
      "mnth_4          366 non-null int64\n",
      "mnth_5          366 non-null int64\n",
      "mnth_6          366 non-null int64\n",
      "mnth_7          366 non-null int64\n",
      "mnth_8          366 non-null int64\n",
      "mnth_9          366 non-null int64\n",
      "mnth_10         366 non-null int64\n",
      "mnth_11         366 non-null int64\n",
      "mnth_12         366 non-null int64\n",
      "weathersit_1    366 non-null int64\n",
      "weathersit_2    366 non-null int64\n",
      "weathersit_3    366 non-null int64\n",
      "weekday_0       366 non-null int64\n",
      "weekday_1       366 non-null int64\n",
      "weekday_2       366 non-null int64\n",
      "weekday_3       366 non-null int64\n",
      "weekday_4       366 non-null int64\n",
      "weekday_5       366 non-null int64\n",
      "weekday_6       366 non-null int64\n",
      "holiday         366 non-null int64\n",
      "workingday      366 non-null int64\n",
      "temp            366 non-null float64\n",
      "atemp           366 non-null float64\n",
      "hum             366 non-null float64\n",
      "windspeed       366 non-null float64\n",
      "cnt             366 non-null int64\n",
      "dtypes: float64(4), int64(29)\n",
      "memory usage: 97.2 KB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['cnt']\n",
    "X_train = train.drop(['cnt'],axis = 1)\n",
    "\n",
    "y_test = test['cnt']\n",
    "X_test = test.drop(['cnt'],axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\Soft\\AI\\Anaconda2\\envs\\python36\\lib\\site-packages\\sklearn\\utils\\validation.py:429: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
      "  warnings.warn(msg, _DataConversionWarning)\n",
      "F:\\Soft\\AI\\Anaconda2\\envs\\python36\\lib\\site-packages\\sklearn\\preprocessing\\data.py:586: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
      "  warnings.warn(DEPRECATION_MSG_1D, DeprecationWarning)\n",
      "F:\\Soft\\AI\\Anaconda2\\envs\\python36\\lib\\site-packages\\sklearn\\preprocessing\\data.py:649: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
      "  warnings.warn(DEPRECATION_MSG_1D, DeprecationWarning)\n",
      "F:\\Soft\\AI\\Anaconda2\\envs\\python36\\lib\\site-packages\\sklearn\\preprocessing\\data.py:649: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n",
      "  warnings.warn(DEPRECATION_MSG_1D, DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "ss_y = StandardScaler()\n",
    "y_train = ss_y.fit_transform(y_train.values)\n",
    "y_test = ss_y.transform(y_test)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ridge regularization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best alpha : 1.0\n",
      "RMSE on Test set : 1.68204538177\n",
      "r2_score on Test set : -0.681071199742\n"
     ]
    }
   ],
   "source": [
    "alphas = [0.01, 0.1, 1, 10, 100, 1000]\n",
    "ridge = RidgeCV(alphas = alphas,store_cv_values = True)\n",
    "\n",
    "#通过交叉验证得到的最佳超参数alpha\n",
    "ridge.fit(X_train, y_train)\n",
    "print(\"Best alpha :\", ridge.alpha_)\n",
    "\n",
    "y_test_pred = ridge.predict(X_test)\n",
    "rmse_test = np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "r2_score_test = r2_score(y_test,y_test_pred)\n",
    "print(\"RMSE on Test set :\", rmse_test)\n",
    "print(\"r2_score on Test set :\", r2_score_test)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridge picked 32 features and eliminated the other 0 features\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1290e320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12cae1d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot important coefficients\n",
    "\n",
    "\n",
    "coefs = pd.Series(ridge.coef_, index = X_train.columns)\n",
    "print(\"Ridge picked \" + str(sum(coefs != 0)) + \" features and eliminated the other \" +  \\\n",
    "      str(sum(coefs == 0)) + \" features\")\n",
    " \n",
    "#正系数值最大的10个特征和负系数值最小（绝对值大）的10个特征\n",
    "imp_coefs = pd.concat([coefs.sort_values().head(10),\n",
    "                     coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind = \"barh\")\n",
    "plt.title(\"Coefficients in the Ridge Model\")\n",
    "plt.show()\n",
    "\n",
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lasso regularization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best alpha : 0.000583591931287\n",
      "RMSE on Test set : 1.67120081685\n",
      "r2_score on Test set : -0.659464508592\n",
      "[-0.63036946 -0.25015851  0.02443521  0.20494384 -0.42656898 -0.299085\n",
      " -0.20257179  0.11363487  0.64798912  0.44619627 -0.07702587  0.\n",
      "  0.31745978  0.23610836 -0.04496444 -0.07990114  0.22036968  0.\n",
      " -0.96176048 -0.0642969  -0.          0.02749274 -0.         -0.01218296\n",
      "  0.0338165   0.03137005 -0.25918909  0.00270031  1.83290731  0.\n",
      " -0.84932623 -0.67233144]\n"
     ]
    }
   ],
   "source": [
    "lasso = LassoCV()\n",
    "lasso.fit(X_train, y_train)\n",
    "print(\"Best alpha :\", lasso.alpha_)\n",
    "y_test_pred = lasso.predict(X_test)\n",
    "rmse_test = np.sqrt(mean_squared_error(y_test,y_test_pred))\n",
    "print(\"RMSE on Test set :\", rmse_test)\n",
    "r2_score_test = r2_score(y_test,y_test_pred)\n",
    "print(\"r2_score on Test set :\", r2_score_test)\n",
    "print(lasso.coef_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x128c5ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Lasso picked 27 features and eliminated the other 5 features\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x16c9c5c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(lasso.alphas_), mses) \n",
    "#plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show() \n",
    "\n",
    "coefs = pd.Series(lasso.coef_, index = X_train.columns)\n",
    "print(\"Lasso picked \" + str(sum(coefs != 0)) + \" features and eliminated the other \" +  \\\n",
    "      str(sum(coefs == 0)) + \" features\")\n",
    "imp_coefs = pd.concat([coefs.sort_values().head(10),\n",
    "                     coefs.sort_values().tail(10)])\n",
    "imp_coefs.plot(kind = \"barh\")\n",
    "plt.title(\"Coefficients in the Lasso Model\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对测试集进行测试，生成提交文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 366 entries, 365 to 730\n",
      "Data columns (total 2 columns):\n",
      "cnt        366 non-null float64\n",
      "instant    366 non-null int64\n",
      "dtypes: float64(1), int64(1)\n",
      "memory usage: 8.6 KB\n"
     ]
    }
   ],
   "source": [
    "y_test_pred = lasso.predict(X_test)\n",
    "\n",
    "#生成提交测试结果\n",
    "\n",
    "df = pd.DataFrame({\"instant\":test_id, 'cnt':y_test_pred})\n",
    "df.to_csv('result.csv')\n",
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
